// Bellman-Ford + SPFA优化模版（洛谷）
// 给定一个 n个点的有向图，请求出图中是否存在从顶点 1 出发能到达的负环
// 负环的定义是：一条边权之和为负数的回路。
// 测试链接 : https://www.luogu.com.cn/problem/P3385
// 提交以下所有代码，可以直接通过

// 这个代码想看的可以看一下，不想看的可以忽略

// 这个代码是没有用 SPFA 优化的，但是感觉不够优雅，同时不
// 加这个 if(head[1] == 0) printf("NO\n")特判的话，无法
// 下面的这个示例，正确答案是 NO，尽管存在负环，但是 1 并
// 不能够达到这个负环的
// 1
// 4 3 
// 2 3 -1
// 3 4 -1
// 4 2 -1

#include <cstdio>
#include <algorithm>

using namespace std;

const int MAXN = 2001;
const int MAXM = 6001;

// 链式前向星建图需要
int head[MAXN];
int next[MAXM];
int to[MAXM];
int weight[MAXM];
int cnt;

// 源点出发到每个节点的距离表
int dist[MAXN];

const int INF = 0x3f3f3f3f;

// 节点是否已经在队列中
bool enter[MAXN];

void build(int n)
{
    cnt = 1;
    fill(head + 1, head + n + 1, 0);
    fill(dist + 1, dist + n + 1, INF);
}

void addEdge(int u, int v, int w)
{
    ::next[cnt] = head[u];
    to[cnt] = v;
    weight[cnt] = w;
    head[u] = cnt++;
}

// Bellman-Ford 的模版
bool spfa(int start, int n)
{
    dist[start] = 0;
    for(int i = 0; i < n - 1; ++i)
    {
        int flag = false;
        for(int i = 1; i <= n; ++i)
        {
            for(int ei = head[i]; ei > 0; ei = ::next[ei])
            {
                int v = to[ei], w = weight[ei];
                if(dist[v] > dist[i] + w)
                {
                    flag = true;
                    dist[v] = dist[i] + w;
                }
            }
        }
        if(!flag) return false; // 本轮没有产生松弛操作，说明没有负环
    }

    // 如果本轮还能再松弛一次，则说明存在负环，但感觉 1 不一定
    // 能够达到这个负环，我也布吉岛啊
    for(int i = 1; i <= n; ++i)
    {
        for(int ei = head[i]; ei > 0; ei = ::next[ei])
        {
            int v = to[ei], w = weight[ei];
            if(dist[v] > dist[i] + w)
            {
                return true;
            }
        }
    }
    return false;
}

int main()
{
    int cases;
    scanf("%d", &cases);
    int n, m;
    for(int i = 0; i < cases; ++i)
    {
        scanf("%d%d", &n, &m);        
        build(n);
        int u, v, w;
        for(int i = 0; i < m; ++i)
        {
            
            scanf("%d%d%d", &u, &v, &w);
            if(w >= 0)
            {
                addEdge(u, v, w);
                addEdge(v, u, w);
            }
            else
                addEdge(u, v, w);
        }
        // 1 没有与任何节点相连，不可能存在负环
        if(head[1] == 0) printf("NO\n");
        else
        {
            if(spfa(1, n)) printf("YES\n");
            else printf("NO\n");
        }
    }

    return 0;
}